#include <iostream>

using namespace std;
const int N = 1e6 + 3;
using ll = long long;
ll arr[N];
ll d[N]; // 差分数组

void solve()
{
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        cin >> arr[i];
    }
    // 创建差分
    for (int i = 1; i <= n; i++)
    {
        d[i] = arr[i] - arr[i - 1];
    }
    // 处理差分,取决于m的次数
    while (m--)
    {
        int l, r, v; // l为区间左边界，r为右,v为要加上的值
        cin >> l >> r >> v;
        d[r + 1] -= v; // r+1不在区间，要想其的值不被影响
        d[l] += v;
    }
    // 处理完之后，前缀和还原
    for (int i = 1; i <= n; i++)
    {
        arr[i] = arr[i - 1] + d[i]; // d[i] = arr[i] - arr[i - 1];差分数组本质是两数差的值，减数+差可还原被减数
    }
    // 打印
    for (int i = 1; i <= n; i++)
    {
        cout << max(arr[i],0ll) << " \n"[i == n]; // 当i为n时候换行
    }
}

int main()
{
    solve(); // 为了方便，这里用函数包装
    return 0;
}